import pygame, re
from Data import DataType, DataManager
from TackGameEvents import ImageRequestEvent

################################################################################
class IMImage(DataType):
	"""
	Container class for images managed by Image Manager
	"""
	############################################################################
	def __init__(self):
		DataType.__init__(self, ['gif', 'jpeg', 'jpg', 'bmp', 'png'])
		self._oImage = None
		self._lColourKey = None
		self._sPath = None
	############################################################################
	
	############################################################################
	# Public Methods
	############################################################################
	############################################################################
	def GetImage(self):
		"""
		Returns the object's pygame image object
		
		return - oImage : PyGame image object
		"""
		return self._oImage
	############################################################################
	
	############################################################################
	def GetPath(self):return self._sPath
	def SetPath(self, sPath): self._sPath = sPath
	############################################################################	
	
	############################################################################
	# Private Methods
	############################################################################	
	############################################################################
	def _LoadData(self, sPath, dData):
		"""
		Requests a Pygame image object from Pygame
		
		param - sPath : Path to image file
		param - dData : Dictionary containing:
			sKey : the Key to assign
			bAutoColourKey : (Default = 0) set to 1 to automatically assign the
			 colour of the top left pixel as the colour key
		"""
		
		# Get Filename (Key)
		oMatch = re.search('\/(\w+)\.\w+$', sPath)
		assert oMatch is not None, "Malformed Path"
		
		# If no key is supplied, take one from the filename
		if dData and dData['sKey'] is not None:
			self._sKey = dData['sKey']
		else:
			self._sKey = oMatch.group(1)
		
		# Convert n store pygame image object
		oImage = pygame.image.load(sPath)
		self._oImage = oImage.convert()
		self._sPath = sPath
		
		if(dData and dData['bAutoColourKey']):
			# Make Colour Key the colour located in top left pixel
			lColourKey = self._oImage.get_at((0,0))
			self._oImage.set_colorkey(lColourKey, pygame.constants.RLEACCEL)
			self._lColourKey = lColourKey
	############################################################################
################################################################################

################################################################################
class ImageManager(DataManager):
	"""
	Management class for images
	"""
	############################################################################
	def __init__(self):
		DataManager.__init__(self, IMImage, ImageRequestEvent)
	############################################################################
	
	############################################################################
	def DataLoad(self, oEvent):
		self.AddDir("images/backgrounds")
		self.AddDir("images/sprites", { 'bAutoColourKey':1 })
	############################################################################
################################################################################
